home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Sep / di9809am / Compont / Sample1 / Update / TapiForm.pas < prev    next >
Pascal/Delphi Source File  |  1998-06-29  |  10KB  |  353 lines

  1. { This project accompanies the article written by Alan Moore
  2.   and Ken Kyler on TAPI basics }
  3.  
  4. unit TapiForm;
  5.  
  6. interface
  7.  
  8. uses
  9.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  10.   StdCtrls, ExtCtrls, Mask, ComCtrls, Tapi, TAPIComp;
  11.  
  12. type
  13.   TTapiCallManager = class(TForm)
  14.     PanelTop: TPanel;
  15.     Label1: TLabel;
  16.     ePhoneNum: TMaskEdit;
  17.     btnDial: TButton;
  18.     btnHangup: TButton;
  19.     cboxDevices: TComboBox;
  20.     cbLineMapper: TCheckBox;
  21.     Memo: TMemo;
  22.     StatusBar: TPanel;
  23.     ImageList: TImageList;
  24.     cboxMediaMode: TComboBox;
  25.     cboxBearerMode: TComboBox;
  26.     Panel1: TPanel;
  27.     RI: TImage;
  28.     CD: TImage;
  29.     RD: TImage;
  30.     DSR: TImage;
  31.     DTR: TImage;
  32.     CTS: TImage;
  33.     Label2: TLabel;
  34.     Label3: TLabel;
  35.     Label4: TLabel;
  36.     Label5: TLabel;
  37.     Label6: TLabel;
  38.     Label7: TLabel;
  39.     Port: TImage;
  40.     Label8: TLabel;
  41.     btnDialingProperties: TButton;
  42.     cbPulseDialing: TCheckBox;
  43.     cboxAcceptCalls: TCheckBox;
  44.     procedure btnDialClick(Sender: TObject);
  45.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  46.     procedure FormCreate(Sender: TObject);
  47.     procedure btnHangupClick(Sender: TObject);
  48.     procedure cboxDevicesChange(Sender: TObject);
  49.     procedure cbLineMapperClick(Sender: TObject);
  50.     procedure cboxMediaModeChange(Sender: TObject);
  51.     procedure cboxBearerModeChange(Sender: TObject);
  52.     procedure btnDialingPropertiesClick(Sender: TObject);
  53.     procedure FormDestroy(Sender: TObject);
  54. //    procedure cboxAcceptCallsClick(Sender: TObject);
  55.     procedure btnAnswerCallClick(Sender: TObject);
  56.     procedure kkamTAPI1EnumerateDevices(sender: TObject;
  57.       UpdateList: TStringList);
  58.     procedure kkamTAPI1OpenLine(sender: TObject; UpdateList: TStringList);
  59.     procedure kkamTAPI1TriggerCommEvent(sender: TObject;
  60.       ACommEvent: TCommEvent; AStatus: Integer);
  61.     procedure kkamTAPI1CreateCallManager(sender: TObject;
  62.       UpdateList: TStringList);
  63.     procedure kkamTAPI1DestroyCallManager(sender: TObject;
  64.       UpdateList: TStringList);
  65.     procedure kkamTAPI1ShutdownManager(sender: TObject;
  66.       UpdateList: TStringList);
  67.     procedure kkamTAPI1Dial(sender: TObject; UpdateList: TStringList);
  68.     procedure cbPulseDialingClick(Sender: TObject);
  69.   //  procedure kkamTAPI1CommThreadEvent(sender: TObject;
  70.   //    ThreadAction: TThreadAction);
  71.  public
  72.     //CommStatusThread: TCommStatus;
  73.     procedure SetBitmap(Image: TImage; Index: integer);
  74.  private
  75.     { Private declarations }
  76.     procedure PhoneNumChange;
  77.     procedure SetModemLights;
  78.     { Public declarations }
  79.   end;
  80.  
  81. var
  82.    TapiCallManager : TTapiCallManager;
  83.    TAPICntrl: TkkamTAPI;
  84.  
  85. const
  86.   Ver = $00010004;  // API version accepted (1.4) [Windows 95]
  87.   off = 0;
  88.   red = 1;
  89.   yellow = 2;
  90.   green = 3;
  91.  
  92. implementation
  93.  
  94. {$R *.DFM}
  95.  
  96. procedure TTapiCallManager.SetModemLights;
  97. var
  98.   S : string;
  99. begin
  100.   // load the ImageList
  101.   S := ExtractFilePath(Application.exename);
  102.   with ImageList do begin
  103.      FileLoad(rtBitMap, S + 'LEDOff.bmp', clNone);      // 0
  104.      FileLoad(rtBitMap, S + 'LEDRedOn.bmp', clNone);    // 1
  105.      FileLoad(rtBitMap, S + 'LEDYellowOn.bmp', clNone); // 2
  106.      FileLoad(rtBitMap, S + 'LEDGreenOn.bmp', clNone);  // 3
  107.   end;
  108.   with ImageList do begin
  109.      GetBitMap(off, RI.Picture.Bitmap);
  110.      GetBitMap(off, CD.Picture.Bitmap);
  111.      GetBitMap(off, RD.Picture.Bitmap);
  112.      GetBitMap(off, DSR.Picture.Bitmap);
  113.      GetBitMap(off, DTR.Picture.Bitmap);
  114.      GetBitMap(off, CTS.Picture.Bitmap);
  115.      GetBitMap(off, Port.Picture.Bitmap);
  116.   end;
  117. end;
  118.  
  119. procedure TTapiCallManager.btnDialClick(Sender: TObject);
  120. var
  121.   DialResult: string;
  122. begin
  123.   if not TAPICntrl.AutoSelectLine  and (TAPICntrl.Dev < 0) then begin
  124.          // a device wasn't selected
  125.      ShowMessage('You must first select a Line device!');
  126.      Exit;
  127.   end;
  128.   DialResult := TAPICntrl.Dial;
  129.   if DialResult='Success' then
  130.     begin
  131.       btnDial.Enabled := false;  // disable the dial button
  132.       btnHangup.Enabled := true; // and enable the hangup button
  133.       Memo.Lines.Add(DialResult);
  134.      end
  135.   else
  136.     ShowMessage(DialResult);
  137. end;
  138.  
  139. procedure TTapiCallManager.FormCloseQuery(Sender: TObject;
  140.                             var CanClose: Boolean);
  141. var
  142.   TempStringList : TStringList;
  143. begin
  144.   TempStringList := TStringList.Create;
  145.   TempStringList.Clear;
  146.   // if the custom call manager was used, make sure to free resources
  147.   if TAPICntrl.CheckLineIsOpen then
  148.      CanClose := TAPICntrl.ShutdownManager;
  149.   // Update Memo
  150.   Memo.Lines.Assign(TStrings(TempStringList));
  151.   TempStringList.Free;
  152. end;
  153.  
  154. procedure TTapiCallManager.FormCreate(Sender: TObject);
  155. var
  156.   S : string;
  157.   TempStringList : TStringList;
  158. begin
  159.   { The following code creates the TkkamTAPI component at run-time
  160.     and assigns the event handlers.
  161.     This saves you from installing the component in order to demo it.}
  162.   TAPICntrl := TkkamTAPI.Create(TapiCallManager);
  163.   with TAPICntrl do begin
  164.       OnEnumerateDevices := kkamTAPI1EnumerateDevices;
  165.         OnOpenLine := kkamTAPI1OpenLine;
  166.         OnTriggerCommEvent := kkamTAPI1TriggerCommEvent;
  167.      OnCreateCallManager := kkamTAPI1CreateCallManager;
  168.         OnDestroyCallManager := kkamTAPI1DestroyCallManager;
  169.         OnShutdownManager := kkamTAPI1ShutdownManager;
  170.         OnDial := kkamTAPI1Dial;
  171.   end;
  172.   TAPICntrl.ChangePhoneNumber(ePhoneNum.Text);
  173.  
  174.   TempStringList := TStringList.Create;
  175.   btnHangup.Enabled := false; // disable the hangup button
  176.   ImageList := TImageList.Create(Application);
  177.   SetModemLights;
  178.   cboxMediaMode.ItemIndex := 3; // default to LINEMEDIAMODE_DATAMODEM
  179.   cboxBearerMode.ItemIndex := 0; // default to LINEBEARERMODE_VOICE
  180.  
  181.   if not TAPICntrl.TapiInitialize then
  182.      // if we can't initialize, close
  183.      begin
  184.      //TAPI_Initialized := False;  // So we don't free stuff twice
  185.      ShowMessage('Could not initialize TAPI -- closing window');
  186.      Memo.Lines.Assign(TStrings(TempStringList));
  187.      Memo.Invalidate;
  188.      TAPICntrl.Free;
  189.      TempStringList.Free;
  190.      Close;
  191.      end
  192.   else
  193.     begin
  194.     if TAPICntrl.OpenLine(False, S) then
  195.     begin
  196.       SetBitMap(TapiCallManager.Port, green);
  197.       ImageList.GetBitMap(green,
  198.       Port.Picture.Bitmap);
  199.     end;
  200.       Memo.Lines.AddStrings(TStrings(TempStringList));
  201.         // fill the combobox with the available devices
  202.       TempStringList.Free;
  203.       TAPICntrl.EnumerateDevices;
  204.     end;
  205.     StatusBar.Caption := cboxDevices.Text;
  206. end;
  207.  
  208. procedure TTapiCallManager.FormDestroy(Sender: TObject);
  209. begin
  210. //  if ImageList<> Nil then
  211. //    ImageList.Free;
  212. end;
  213.  
  214. procedure TTapiCallManager.btnHangupClick(Sender: TObject);
  215. var
  216.   TempStringList : TStringList;
  217. begin
  218.   TempStringList := TStringList.Create;
  219.   if not TAPICntrl.ShutdownManager then
  220.     begin
  221.       Memo.Lines.Assign(TStrings(TempStringList));
  222.       Memo.Invalidate;
  223.       TempStringList.Free;
  224.       Exit;
  225.     end
  226.   else
  227.     begin
  228.       Memo.Lines.Assign(TStrings(TempStringList));
  229.       Memo.Invalidate;
  230.       TempStringList.Free;
  231.       btnHangup.Enabled := false;   // disable the hangup button
  232.       btnDial.Enabled := true;      // enable the dial button
  233.     end;
  234. end;
  235.  
  236. procedure TTapiCallManager.SetBitmap(Image: TImage; Index: integer);
  237. var
  238.   Bmp: TBitMap;
  239. begin
  240.   Bmp := TBitMap.Create;
  241.   try
  242.      ImageList.GetBitMap(Index, Bmp);
  243.      Image.Picture.Bitmap := Bmp;
  244.   finally
  245.     Bmp.Free;
  246.   end;
  247. end;
  248.  
  249.  
  250. procedure TTapiCallManager.cboxDevicesChange(Sender: TObject);
  251. begin
  252.   TAPICntrl.Dev := cboxDevices.ItemIndex;
  253. end;
  254.  
  255. procedure TTapiCallManager.cbLineMapperClick(Sender: TObject);
  256. begin
  257.   if cbLineMapper.Checked then
  258.      TAPICntrl.AutoSelectLine := True else
  259.      TAPICntrl.AutoSelectLine := False;
  260.   cboxDevices.Enabled := not TAPICntrl.AutoSelectLine;
  261.   if TAPICntrl.AutoSelectLine then
  262.      TAPICntrl.Dev := 0
  263.   else
  264.      TAPICntrl.Dev := cboxDevices.ItemIndex;
  265. end;
  266.  
  267. procedure TTapiCallManager.PhoneNumChange;
  268. begin
  269.   TAPICntrl.PhoneNumber := ePhoneNum.Text;
  270. end;
  271.  
  272. procedure TTapiCallManager.cboxMediaMo